package com.study.animationstudy.ui

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.animation.Animation.AnimationListener
import android.view.animation.AnimationSet
import android.view.animation.RotateAnimation
import android.view.animation.ScaleAnimation
import android.view.animation.TranslateAnimation
import com.study.animationstudy.R
import com.study.animationstudy.base.BaseActivity
import com.study.animationstudy.databinding.ActivityAnimSetBinding

class AnimSetActivity : BaseActivity<ActivityAnimSetBinding>(),AnimationListener {

    private lateinit var aniSet:AnimationSet

    override fun ActivityAnimSetBinding.initBinding() {
        initAnimation()
    }

    /**
     * 初始化集合动画
     */
    private fun initAnimation(){
        // 创建一个灰度动画 0.0～1.0（0表示完全不透明，1表示完全透明）
        val alphaAnimation = AlphaAnimation(1f,0.1f)
        // 设置动画的播放时长
        alphaAnimation.duration = 3000
        // 设置维持结束画面
        alphaAnimation.fillAfter = true
        // 创建一个平移动画 向左平移200，第一个参数是原始横坐标，第二个参数是平移后的的横坐标，第三个参数是原始纵坐标，第四个参数是平移后的纵坐标
        val translateAnimation = TranslateAnimation(1f,-200f,1f,1f)
        // 设置动画的播放时长
        translateAnimation.duration = 3000
        // 设置维持结束画面
        translateAnimation.fillAfter = true
         // 创建一个缩放动画,第一个参数是缩放前的横坐标比例，第二个是缩放后的横坐标比例，第三个是缩放前的纵坐标比例，第四个是缩放后的纵坐标比例
        val scaleAnimation = ScaleAnimation(1f,1f,1f,0.5f)
        // 设置动画的播放时长
        scaleAnimation.duration = 3000
        // 设置维持结束画面
        scaleAnimation.fillAfter = true
        // 创建一个旋转动画
        val rotateAnimation = RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f)
        // 设置动画的播放时长
        rotateAnimation.duration = 3000
        // 设置维持结束画面
        rotateAnimation.fillAfter = true
        // 创建一个集合动画
        aniSet = AnimationSet(true)
        // 下面在代码中添加集合动画
        aniSet.addAnimation(alphaAnimation)
        aniSet.addAnimation(translateAnimation)
        aniSet.addAnimation(scaleAnimation)
        aniSet.addAnimation(rotateAnimation)
        aniSet.fillAfter = true
        startAnim()
    }

    /**
     * 开始播放集合动画
     */
    private fun startAnim(){
        mBinding.aniSet.startAnimation(aniSet)
        aniSet.setAnimationListener(this)
    }

    override fun onAnimationStart(animation: Animation?) {

    }

    override fun onAnimationEnd(animation: Animation?) {
        // 原集合动画播放完毕，接着播放倒过来的集合动画
        if (animation?.equals(aniSet) == true){
            // 创建一个灰度动画 0.0～1.0（0表示完全不透明，1表示完全透明）
            val alphaAnimation = AlphaAnimation(0.1f,1f)
            // 设置动画的播放时长
            alphaAnimation.duration = 3000
            // 设置维持结束画面
            alphaAnimation.fillAfter = true
            // 创建一个平移动画 向左平移200，第一个参数是原始横坐标，第二个参数是平移后的的横坐标，第三个参数是原始纵坐标，第四个参数是平移后的纵坐标
            val translateAnimation = TranslateAnimation(-200f,1f,1f,1f)
            // 设置动画的播放时长
            translateAnimation.duration = 3000
            // 设置维持结束画面
            translateAnimation.fillAfter = true
            // 创建一个缩放动画,第一个参数是缩放前的横坐标比例，第二个是缩放后的横坐标比例，第三个是缩放前的纵坐标比例，第四个是缩放后的纵坐标比例
            val scaleAnimation = ScaleAnimation(1f,1f,0.5f,1f)
            // 设置动画的播放时长
            scaleAnimation.duration = 3000
            // 设置维持结束画面
            scaleAnimation.fillAfter = true
            // 创建一个旋转动画,围绕着圆心逆时针旋转360度
            val rotateAnimation = RotateAnimation(0f,-360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f)
            // 设置动画的播放时长
            rotateAnimation.duration = 3000
            // 设置维持结束画面
            rotateAnimation.fillAfter = true
            // 创建一个集合动画
            val aniSet = AnimationSet(true)
            // 下面在代码中添加集合动画
            aniSet.addAnimation(alphaAnimation)
            aniSet.addAnimation(translateAnimation)
            aniSet.addAnimation(scaleAnimation)
            aniSet.addAnimation(rotateAnimation)
            aniSet.fillAfter = true
            mBinding.aniSet.startAnimation(aniSet)
        }
    }

    override fun onAnimationRepeat(animation: Animation?) {

    }

}